package geekbang.single;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author xuyanqing
 * @description ✨静态内部类实现单例
 * SingletonHolder 是一个静态内部类，当外部类 IdGeneratorHungry 被加载的时候，并不会创建
 * SingletonHolder 实例对象。只有当调用 getInstance() 方法时，SingletonHolder 才会
 * 被加载，这个时候才会创建 instance。insance 的唯一性、创建过程的线程安全性，都由 JVM 来保证
 * @date 2025-10-11 15:55
 * @creed where there is a will,there is a way. yx
 */

public class IdGeneratorInnerClass {
    private IdGeneratorInnerClass() {
    }

    /**
     * 既支持延迟加载，也支持高并发，实现起来也比双重检测简单
     */
    private static class IdGeneratorHolder {
        private static final IdGeneratorInnerClass instance = new IdGeneratorInnerClass();
    }
    public static IdGeneratorInnerClass getInstance() {
        return IdGeneratorHolder.instance;
    }
    private AtomicInteger id = new AtomicInteger(0);
    public long getId() {
        return id.incrementAndGet();
    }
}
